{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lecture 2: Sorting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Insertion Sort"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This implements the most naive version of insertion sort, following the logic: \"insert the thing where it needs to go.\"  \n",
    "\n",
    "It makes a blank list, and inserts elements one-at-a-time.\n",
    "\n",
    "This is not a very good way to implement insertion sort."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def naiveInsertionSort(A):\n",
    "    B = [None for i in range(len(A))] # B is a blank list of the same length as A\n",
    "    for x in A:\n",
    "        for i in range(len(B)):\n",
    "            if B[i] == None or B[i] > x:\n",
    "                # then x goes in spot i, and we should move everything over.\n",
    "                j = len(B)-1\n",
    "                while j > i:\n",
    "                    B[j] = B[j-1]\n",
    "                    j -= 1\n",
    "                B[i] = x\n",
    "                break # okay we are done placing x\n",
    "    return B"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's sanity-check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 4, 5, 6, 8]\n"
     ]
    }
   ],
   "source": [
    "A = [6,4,3,8,5]\n",
    "B = naiveInsertionSort(A)\n",
    "print(B)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The code above faithfully captures the notion of \"insertion sort\" that we first described on the slides: insert the elements into a new list, one-at-a-time, where they should go.  But we can be a bit more slick about it, and do it in-place.  The following  implements the description of insertion sort in-place, which we gave a demonstration of in the slides."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def InsertionSort(A):\n",
    "    for i in range(1,len(A)):\n",
    "        current = A[i]\n",
    "        j = i-1\n",
    "        while j >= 0 and A[j] > current:\n",
    "            A[j+1] = A[j]\n",
    "            j -= 1\n",
    "        A[j+1] = current"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's sanity-check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 4, 5, 6, 8]\n"
     ]
    }
   ],
   "source": [
    "A = [6,4,3,8,5]\n",
    "InsertionSort(A)\n",
    "print(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Okay, now we have two working algorithms.  Which one is faster?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'tryItABunch'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-19-45cb12ebadb3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mtryItABunch\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mtryItABunch\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtryItABunch\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mnValuesNaive\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValuesNaive\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtryItABunch\u001b[0m\u001b[1;33m(\u001b[0m \u001b[0mnaiveInsertionSort\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstartN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mendN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1050\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstepSize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumTrials\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlistMax\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m10\u001b[0m \u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mnValues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValues\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtryItABunch\u001b[0m\u001b[1;33m(\u001b[0m \u001b[0mInsertionSort\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstartN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mendN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1050\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstepSize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumTrials\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlistMax\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'tryItABunch'"
     ]
    }
   ],
   "source": [
    "from tryItABunch import tryItABunch\n",
    "nValuesNaive, tValuesNaive = tryItABunch( naiveInsertionSort, startN = 50, endN = 1050, stepSize=50, numTrials=10, listMax = 10 )\n",
    "nValues, tValues = tryItABunch( InsertionSort, startN = 50, endN = 1050, stepSize=50, numTrials=5, listMax = 10) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'nValuesNaive' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-20-d6d37b81856d>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnValuesNaive\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValuesNaive\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"red\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"Naive version\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnValues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"blue\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"Less naive version\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"n\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Time(ms)\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlegend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'nValuesNaive' is not defined"
     ]
    }
   ],
   "source": [
    "plt.plot(nValuesNaive, tValuesNaive, color=\"red\", label=\"Naive version\")\n",
    "plt.plot(nValues, tValues, color=\"blue\", label=\"Less naive version\")\n",
    "plt.xlabel(\"n\")\n",
    "plt.ylabel(\"Time(ms)\")\n",
    "plt.legend()\n",
    "plt.title(\"Naive vs. non-naive insertion sort\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Well, that does agree with our intuition that the naive version should take longer.  But it looks like the performance is getting worse and worse!  Instead of growing roughly linearly with the size of the input, it's growing quadratically!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MergeSort\n",
    "\n",
    "Okay, so InsertionSort was slow.  Can we do better?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# merge two sorted arrays to return a sorted array\n",
    "def merge(L, R):\n",
    "    i = 0 # current index in the L array\n",
    "    j = 0 # current index in the R array\n",
    "    ret = []\n",
    "    while i < len(L) and j < len(R):\n",
    "        if L[i] < R[j]:\n",
    "            ret.append(L[i])\n",
    "            i += 1\n",
    "        else:   # ties go to R.  Doesn't really matter.\n",
    "            ret.append(R[j])\n",
    "            j += 1\n",
    "    while i < len(L):\n",
    "        ret.append(L[i])\n",
    "        i += 1\n",
    "    while j < len(R):\n",
    "        ret.append(R[j])\n",
    "        j+= 1\n",
    "    return ret\n",
    "        \n",
    "def mergeSort(A):\n",
    "    n = len(A)\n",
    "    if n <= 1:\n",
    "        return A\n",
    "    L = mergeSort(A[:round(n/2)])\n",
    "    R = mergeSort(A[round(n/2):n])\n",
    "    return merge(L,R)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's sanity-check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2, 3, 3, 4, 4, 17, 27, 52]\n"
     ]
    }
   ],
   "source": [
    "A = [27,17,2,4,52,3,4,3]\n",
    "B = mergeSort(A)\n",
    "print(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'tryItABunch' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-9-ff6cd4780b7b>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnValuesMerge\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValuesMerge\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtryItABunch\u001b[0m\u001b[1;33m(\u001b[0m \u001b[0mmergeSort\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstartN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mendN\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1050\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstepSize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m50\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumTrials\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlistMax\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'tryItABunch' is not defined"
     ]
    }
   ],
   "source": [
    "nValuesMerge, tValuesMerge = tryItABunch( mergeSort, startN = 50, endN = 1050, stepSize=50, numTrials=10, listMax = 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we can take a look at how that fits in with what we saw before"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'nValuesNaive' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-10-2de76e6e5ce8>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnValuesNaive\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValuesNaive\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"red\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"Naive version of insertion sort\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnValues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"blue\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"Less naive version of insertion sort\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnValuesMerge\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtValuesMerge\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"orange\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"Not very slick implementation of mergeSort\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"n\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Time(ms)\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'nValuesNaive' is not defined"
     ]
    }
   ],
   "source": [
    "plt.plot(nValuesNaive, tValuesNaive, color=\"red\", label=\"Naive version of insertion sort\")\n",
    "plt.plot(nValues, tValues, color=\"blue\", label=\"Less naive version of insertion sort\")\n",
    "plt.plot(nValuesMerge, tValuesMerge, color=\"orange\", label=\"Not very slick implementation of mergeSort\")\n",
    "plt.xlabel(\"n\")\n",
    "plt.ylabel(\"Time(ms)\")\n",
    "plt.legend()\n",
    "plt.title(\"All sorts of sorts\")"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "For reference, this is how the theoretical running time looks:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x10ff7b240>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fc92a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(nValuesMerge, [x**2 for x in nValuesMerge], color=\"green\", label=\"n^2\")\n",
    "plt.plot(nValuesMerge, [x*np.log(x) for x in nValuesMerge], \"--\", color=\"orange\", label=\"nlog(n)\")\n",
    "plt.plot(nValuesMerge, [11*x*np.log(x) for x in nValuesMerge], \"--\", color=\"red\", label=\"11*nlog(n)\")\n",
    "plt.plot(nValuesMerge, [100*x*np.log(x) for x in nValuesMerge], \"--\", color=\"purple\", label=\"100*nlog(n)\")\n",
    "plt.plot(nValuesMerge, [200*x*np.log(x) for x in nValuesMerge], \"--\", color=\"blue\", label=\"200*nlog(n)\")\n",
    "plt.xlabel(\"n\")\n",
    "plt.ylim(0,800000)\n",
    "plt.legend()\n",
    "plt.title(\"n^2 vs nlog(n)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
